<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.2"/>
<title>GLFW: Release notes</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="extra.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
	<div class="glfwheader">
		<a href="https://www.glfw.org/" id="glfwhome">GLFW</a>
		<ul class="glfwnavbar">
			<li><a href="https://www.glfw.org/documentation.html">Documentation</a></li>
			<li><a href="https://www.glfw.org/download.html">Download</a></li>
			<li><a href="https://www.glfw.org/community.html">Community</a></li>
		</ul>
	</div>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

</div><!-- top -->
<div><div class="header">
  <div class="headertitle"><div class="title">Release notes </div></div>
</div><!--header-->
<div class="contents">
<div class="toc"><h3>Table of Contents</h3>
<ul><li class="level1"><a href="#news_33">Release notes for version 3.3</a><ul><li class="level2"><a href="#features_33">New features in version 3.3</a><ul><li class="level3"><a href="#gamepad_33">Gamepad input via SDL_GameControllerDB</a></li>
<li class="level3"><a href="#moltenvk_33">Support for Vulkan on macOS via MoltenVK</a></li>
<li class="level3"><a href="#content_scale_33">Content scale queries for DPI-aware rendering</a></li>
<li class="level3"><a href="#setwindowattrib_33">Support for updating window attributes</a></li>
<li class="level3"><a href="#raw_motion_33">Support for raw mouse motion</a></li>
<li class="level3"><a href="#joysticks_33">Joystick hats</a></li>
<li class="level3"><a href="#geterror_33">Error query</a></li>
<li class="level3"><a href="#init_hints_33">Support for initialization hints</a></li>
<li class="level3"><a href="#attention_33">User attention request</a></li>
<li class="level3"><a href="#maximize_33">Window maximization callback</a></li>
<li class="level3"><a href="#workarea_33">Query for the monitor work area</a></li>
<li class="level3"><a href="#transparency_33">Transparent windows and framebuffers</a></li>
<li class="level3"><a href="#key_scancode_33">Query for the scancode of a key</a></li>
<li class="level3"><a href="#center_cursor_33">Cursor centering window hint</a></li>
<li class="level3"><a href="#cursor_hover_33">Mouse cursor hover window attribute</a></li>
<li class="level3"><a href="#focusonshow_33">Window hint and attribute for input focus on show</a></li>
<li class="level3"><a href="#device_userptr_33">Monitor and joystick user pointers</a></li>
<li class="level3"><a href="#macos_nib_33">macOS menu bar from nib file</a></li>
<li class="level3"><a href="#glext_33">Support for more context creation extensions</a></li>
<li class="level3"><a href="#osmesa_33">OSMesa off-screen context creation support</a></li>
</ul>
</li>
<li class="level2"><a href="#caveats_33">Caveats for version 3.3</a><ul><li class="level3"><a href="#joystick_layout_33">Layout of joysticks have changed</a></li>
<li class="level3"><a href="#wait_events_33">No window required to wait for events</a></li>
<li class="level3"><a href="#gamma_ramp_size_33">Gamma ramp size of 256 may be rejected</a></li>
<li class="level3"><a href="#xinput_deadzone_33">Windows XInput deadzone removed</a></li>
<li class="level3"><a href="#x11_clipboard_33">X11 clipboard transfer limits</a></li>
<li class="level3"><a href="#x11_linking_33">X11 extension libraries are loaded dynamically</a></li>
<li class="level3"><a href="#cmake_version_33">CMake 3.0 or later is required</a></li>
<li class="level3"><a href="#caveat_fbtransparency_33">Framebuffer transparency requires DWM transparency</a></li>
</ul>
</li>
<li class="level2"><a href="#deprecations_33">Deprecations in version 3.3</a><ul><li class="level3"><a href="#charmods_callback_33">Character with modifiers callback</a></li>
<li class="level3"><a href="#clipboard_window_33">Window parameter to clipboard functions</a></li>
</ul>
</li>
<li class="level2"><a href="#removals_33">Removals in 3.3</a><ul><li class="level3"><a href="#macos_options_33">macOS specific CMake options and macros</a></li>
<li class="level3"><a href="#vulkan_sdk_33">LunarG Vulkan SDK dependency</a></li>
<li class="level3"><a href="#lib_suffix_33">CMake option LIB_SUFFIX</a></li>
<li class="level3"><a href="#mir_removed_33">Mir support</a></li>
</ul>
</li>
<li class="level2"><a href="#symbols_33">New symbols in version 3.3</a><ul><li class="level3"><a href="#functions_33">New functions in version 3.3</a></li>
<li class="level3"><a href="#types_33">New types in version 3.3</a></li>
<li class="level3"><a href="#constants_33">New constants in version 3.3</a></li>
</ul>
</li>
</ul>
</li>
<li class="level1"><a href="#news_32">Release notes for 3.2</a><ul><li class="level2"><a href="#features_32">New features in version 3.2</a><ul><li class="level3"><a href="#news_32_vulkan">Support for Vulkan</a></li>
<li class="level3"><a href="#news_32_setwindowmonitor">Window mode switching</a></li>
<li class="level3"><a href="#news_32_maximize">Window maxmimization support</a></li>
<li class="level3"><a href="#news_32_focus">Window input focus control</a></li>
<li class="level3"><a href="#news_32_sizelimits">Window size limit support</a></li>
<li class="level3"><a href="#news_32_keyname">Localized key names</a></li>
<li class="level3"><a href="#news_32_waittimeout">Wait for events with timeout</a></li>
<li class="level3"><a href="#news_32_icon">Window icon support</a></li>
<li class="level3"><a href="#news_32_timer">Raw timer access</a></li>
<li class="level3"><a href="#news_32_joystick">Joystick connection callback</a></li>
<li class="level3"><a href="#news_32_noapi">Context-less windows</a></li>
<li class="level3"><a href="#news_32_contextapi">Run-time context creation API selection</a></li>
<li class="level3"><a href="#news_32_noerror">Error-free context creation</a></li>
<li class="level3"><a href="#news_32_cmake">CMake config-file package support</a></li>
</ul>
</li>
</ul>
</li>
<li class="level1"><a href="#news_31">Release notes for 3.1</a><ul><li class="level2"><a href="#features_31">New features in version 3.1</a><ul><li class="level3"><a href="#news_31_cursor">Custom mouse cursor images</a></li>
<li class="level3"><a href="#news_31_drop">Path drop event</a></li>
<li class="level3"><a href="#news_31_emptyevent">Main thread wake-up</a></li>
<li class="level3"><a href="#news_31_framesize">Window frame size query</a></li>
<li class="level3"><a href="#news_31_autoiconify">Simultaneous multi-monitor rendering</a></li>
<li class="level3"><a href="#news_31_floating">Floating windows</a></li>
<li class="level3"><a href="#news_31_focused">Initially unfocused windows</a></li>
<li class="level3"><a href="#news_31_direct">Direct access for window attributes and cursor position</a></li>
<li class="level3"><a href="#news_31_charmods">Character with modifiers callback</a></li>
<li class="level3"><a href="#news_31_single">Single buffered framebuffers</a></li>
<li class="level3"><a href="#news_31_glext">Macro for including extension header</a></li>
<li class="level3"><a href="#news_31_release">Context release behaviors</a></li>
<li class="level3"><a href="#news_31_wayland">(Experimental) Wayland support</a></li>
<li class="level3"><a href="#news_31_mir">(Experimental) Mir support</a></li>
</ul>
</li>
</ul>
</li>
<li class="level1"><a href="#news_30">Release notes for 3.0</a><ul><li class="level2"><a href="#features_30">New features in version 3.0</a><ul><li class="level3"><a href="#news_30_cmake">CMake build system</a></li>
<li class="level3"><a href="#news_30_multiwnd">Multi-window support</a></li>
<li class="level3"><a href="#news_30_multimon">Multi-monitor support</a></li>
<li class="level3"><a href="#news_30_unicode">Unicode support</a></li>
<li class="level3"><a href="#news_30_clipboard">Clipboard text I/O</a></li>
<li class="level3"><a href="#news_30_gamma">Gamma ramp support</a></li>
<li class="level3"><a href="#news_30_gles">OpenGL ES support</a></li>
<li class="level3"><a href="#news_30_egl">(Experimental) EGL support</a></li>
<li class="level3"><a href="#news_30_hidpi">High-DPI support</a></li>
<li class="level3"><a href="#news_30_error">Error callback</a></li>
<li class="level3"><a href="#news_30_wndptr">Per-window user pointer</a></li>
<li class="level3"><a href="#news_30_iconifyfun">Window iconification callback</a></li>
<li class="level3"><a href="#news_30_wndposfun">Window position callback</a></li>
<li class="level3"><a href="#news_30_wndpos">Window position query</a></li>
<li class="level3"><a href="#news_30_focusfun">Window focus callback</a></li>
<li class="level3"><a href="#news_30_enterleave">Cursor enter/leave callback</a></li>
<li class="level3"><a href="#news_30_wndtitle">Initial window title</a></li>
<li class="level3"><a href="#news_30_hidden">Hidden windows</a></li>
<li class="level3"><a href="#news_30_undecorated">Undecorated windows</a></li>
<li class="level3"><a href="#news_30_keymods">Modifier key bit masks</a></li>
<li class="level3"><a href="#news_30_scancode">Platform-specific scancodes</a></li>
<li class="level3"><a href="#news_30_jsname">Joystick names</a></li>
<li class="level3"><a href="#news_30_doxygen">Doxygen documentation</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="textblock"><h1><a class="anchor" id="news_33"></a>
Release notes for version 3.3</h1>
<p >These are the release notes for version 3.3. For a more detailed view including all fixed bugs see the <a href="https://www.glfw.org/changelog.html">version history</a>.</p>
<p >Please review the caveats, deprecations and removals if your project was written against an earlier version of GLFW 3.</p>
<h2><a class="anchor" id="features_33"></a>
New features in version 3.3</h2>
<h3><a class="anchor" id="gamepad_33"></a>
Gamepad input via SDL_GameControllerDB</h3>
<p >GLFW can now remap game controllers to a standard Xbox-like layout using a built-in copy of SDL_GameControllerDB. Call <a class="el" href="group__input.html#gad0f676860f329d80f7e47e9f06a96f00">glfwJoystickIsGamepad</a> to check if a joystick has a mapping, <a class="el" href="group__input.html#gadccddea8bce6113fa459de379ddaf051">glfwGetGamepadState</a> to retrieve its input state, <a class="el" href="group__input.html#gaed5104612f2fa8e66aa6e846652ad00f">glfwUpdateGamepadMappings</a> to add newer mappings and <a class="el" href="group__input.html#ga8aea73a1a25cc6c0486a617019f56728">glfwGetGamepadName</a> and <a class="el" href="group__input.html#ga6659411aec3c7fcef27780e2cb2d9600">glfwGetJoystickGUID</a> for mapping related information.</p>
<p >For more information see <a class="el" href="input_guide.html#gamepad">Gamepad input</a>.</p>
<h3><a class="anchor" id="moltenvk_33"></a>
Support for Vulkan on macOS via MoltenVK</h3>
<p >GLFW now supports <a href="https://moltengl.com/moltenvk/">MoltenVK</a>, a Vulkan implementation on top of the Metal API, and its <code>VK_MVK_macos_surface</code> window surface creation extension. MoltenVK is included in the <a href="https://vulkan.lunarg.com/">macOS Vulkan SDK</a>.</p>
<p >For more information see <a class="el" href="vulkan_guide.html">Vulkan guide</a>.</p>
<h3><a class="anchor" id="content_scale_33"></a>
Content scale queries for DPI-aware rendering</h3>
<p >GLFW now provides content scales for windows and monitors, i.e. the ratio between their current DPI and the platform's default DPI, with <a class="el" href="group__window.html#gaf5d31de9c19c4f994facea64d2b3106c">glfwGetWindowContentScale</a> and <a class="el" href="group__monitor.html#gad3152e84465fa620b601265ebfcdb21b">glfwGetMonitorContentScale</a>.</p>
<p >Changes of the content scale of a window can be received with the window content scale callback, set with <a class="el" href="group__window.html#gaf2832ebb5aa6c252a2d261de002c92d6">glfwSetWindowContentScaleCallback</a>.</p>
<p >The <a class="el" href="window_guide.html#GLFW_SCALE_TO_MONITOR">GLFW_SCALE_TO_MONITOR</a> window hint enables automatic resizing of a window by the content scale of the monitor it is placed, on platforms like Windows where this is necessary. This takes effect both on creation and when the window is moved between monitors. It is related to but different from <a class="el" href="window_guide.html#GLFW_COCOA_RETINA_FRAMEBUFFER_hint">GLFW_COCOA_RETINA_FRAMEBUFFER</a>.</p>
<p >For more information see <a class="el" href="window_guide.html#window_scale">Window content scale</a>.</p>
<h3><a class="anchor" id="setwindowattrib_33"></a>
Support for updating window attributes</h3>
<p >GLFW now supports changing the <a class="el" href="window_guide.html#GLFW_DECORATED_attrib">GLFW_DECORATED</a>, <a class="el" href="window_guide.html#GLFW_RESIZABLE_attrib">GLFW_RESIZABLE</a>, <a class="el" href="window_guide.html#GLFW_FLOATING_attrib">GLFW_FLOATING</a>, <a class="el" href="window_guide.html#GLFW_AUTO_ICONIFY_attrib">GLFW_AUTO_ICONIFY</a> and <a class="el" href="window_guide.html#GLFW_FOCUS_ON_SHOW_attrib">GLFW_FOCUS_ON_SHOW</a> attributes for existing windows with <a class="el" href="group__window.html#gace2afda29b4116ec012e410a6819033e">glfwSetWindowAttrib</a>.</p>
<p >For more information see <a class="el" href="window_guide.html#window_attribs">Window attributes</a>.</p>
<h3><a class="anchor" id="raw_motion_33"></a>
Support for raw mouse motion</h3>
<p >GLFW now supports raw (unscaled and unaccelerated) mouse motion in disabled cursor mode with the <a class="el" href="input_guide.html#GLFW_RAW_MOUSE_MOTION">GLFW_RAW_MOUSE_MOTION</a> input mode. Raw mouse motion input is not yet implemented on macOS. Call <a class="el" href="group__input.html#gae4ee0dbd0d256183e1ea4026d897e1c2">glfwRawMouseMotionSupported</a> to check if GLFW can provide raw mouse motion on the current system.</p>
<p >For more information see <a class="el" href="input_guide.html#raw_mouse_motion">Raw mouse motion</a>.</p>
<h3><a class="anchor" id="joysticks_33"></a>
Joystick hats</h3>
<p >GLFW can now return the state of hats (i.e. POVs or D-pads) of a joystick with <a class="el" href="group__input.html#ga06e660841b3e79c54da4f54a932c5a2c">glfwGetJoystickHats</a>. For compatibility, hats are also exposed as buttons. This can be disabled with the <a class="el" href="intro_guide.html#GLFW_JOYSTICK_HAT_BUTTONS">GLFW_JOYSTICK_HAT_BUTTONS</a> initialization hint.</p>
<p >For more information see <a class="el" href="input_guide.html#joystick_hat">Joystick hat states</a>.</p>
<h3><a class="anchor" id="geterror_33"></a>
Error query</h3>
<p >GLFW now supports querying the last error code for the calling thread and its human-readable description with <a class="el" href="group__init.html#ga944986b4ec0b928d488141f92982aa18">glfwGetError</a>. This can be used instead of or together with the error callback.</p>
<p >For more information see <a class="el" href="intro_guide.html#error_handling">Error handling</a>.</p>
<h3><a class="anchor" id="init_hints_33"></a>
Support for initialization hints</h3>
<p >GLFW now supports setting library initialization hints with <a class="el" href="group__init.html#ga110fd1d3f0412822b4f1908c026f724a">glfwInitHint</a>. These must be set before initialization to take effect. Some of these hints are platform specific but are safe to set on any platform.</p>
<p >For more information see <a class="el" href="intro_guide.html#init_hints">Initialization hints</a>.</p>
<h3><a class="anchor" id="attention_33"></a>
User attention request</h3>
<p >GLFW now supports requesting user attention with <a class="el" href="group__window.html#ga2f8d59323fc4692c1d54ba08c863a703">glfwRequestWindowAttention</a>. Where possible this calls attention to the specified window. On platforms like macOS it calls attention to the whole application.</p>
<p >For more information see <a class="el" href="window_guide.html#window_attention">Window attention request</a>.</p>
<h3><a class="anchor" id="maximize_33"></a>
Window maximization callback</h3>
<p >GLFW now supports notifying the application that the window has been maximized <a class="el" href="group__window.html#gacbe64c339fbd94885e62145563b6dc93">glfwSetWindowMaximizeCallback</a>. This is called both when the window was maximized by the user and when it was done with <a class="el" href="group__window.html#ga3f541387449d911274324ae7f17ec56b">glfwMaximizeWindow</a>.</p>
<p >For more information see <a class="el" href="window_guide.html#window_maximize">Window maximization</a>.</p>
<h3><a class="anchor" id="workarea_33"></a>
Query for the monitor work area</h3>
<p >GLFW now supports querying the work area of a monitor, i.e. the area not occupied by task bars or global menu bars, with <a class="el" href="group__monitor.html#ga7387a3bdb64bfe8ebf2b9e54f5b6c9d0">glfwGetMonitorWorkarea</a>. On platforms that lack this concept, the whole area of the monitor is returned.</p>
<p >For more information see <a class="el" href="monitor_guide.html#monitor_workarea">Work area</a>.</p>
<h3><a class="anchor" id="transparency_33"></a>
Transparent windows and framebuffers</h3>
<p >GLFW now supports the creation of windows with transparent framebuffers on systems with desktop compositing enabled with the <a class="el" href="group__window.html#ga60a0578c3b9449027d683a9c6abb9f14">GLFW_TRANSPARENT_FRAMEBUFFER</a> window hint and attribute. This hint must be set before window creation and leaves any window decorations opaque.</p>
<p >GLFW now also supports whole window transparency with <a class="el" href="group__window.html#gad09f0bd7a6307c4533b7061828480a84">glfwGetWindowOpacity</a> and <a class="el" href="group__window.html#gac31caeb3d1088831b13d2c8a156802e9">glfwSetWindowOpacity</a>. This value controls the opacity of the whole window including decorations and unlike framebuffer transparency can be changed at any time after window creation.</p>
<p >For more information see <a class="el" href="window_guide.html#window_transparency">Window transparency</a>.</p>
<h3><a class="anchor" id="key_scancode_33"></a>
Query for the scancode of a key</h3>
<p >GLFW now supports querying the platform dependent scancode of any physical key with <a class="el" href="group__input.html#ga67ddd1b7dcbbaff03e4a76c0ea67103a">glfwGetKeyScancode</a>.</p>
<p >For more information see <a class="el" href="input_guide.html#input_key">Key input</a>.</p>
<h3><a class="anchor" id="center_cursor_33"></a>
Cursor centering window hint</h3>
<p >GLFW now supports controlling whether the cursor is centered over newly created full screen windows with the <a class="el" href="window_guide.html#GLFW_CENTER_CURSOR_hint">GLFW_CENTER_CURSOR</a> window hint. It is enabled by default.</p>
<h3><a class="anchor" id="cursor_hover_33"></a>
Mouse cursor hover window attribute</h3>
<p >GLFW now supports polling whether the cursor is hovering over the window content area with the <a class="el" href="window_guide.html#GLFW_HOVERED_attrib">GLFW_HOVERED</a> window attribute. This attribute corresponds to the <a class="el" href="input_guide.html#cursor_enter">cursor enter/leave</a> event.</p>
<h3><a class="anchor" id="focusonshow_33"></a>
Window hint and attribute for input focus on show</h3>
<p >GLFW now has the <a class="el" href="window_guide.html#GLFW_DECORATED_hint">GLFW_FOCUS_ON_SHOW</a> window hint and attribute for controlling whether a window gets input focus when shown. It is enabled by default. It applies both when creating an visible window with <a class="el" href="group__window.html#ga3555a418df92ad53f917597fe2f64aeb">glfwCreateWindow</a> and when showing it with <a class="el" href="group__window.html#ga61be47917b72536a148300f46494fc66">glfwShowWindow</a>.</p>
<p >This is a workaround for GLFW 3.0 lacking <a class="el" href="group__window.html#ga873780357abd3f3a081d71a40aae45a1">glfwFocusWindow</a> and will be corrected in the next major version.</p>
<p >For more information see <a class="el" href="window_guide.html#window_hide">Window visibility</a>.</p>
<h3><a class="anchor" id="device_userptr_33"></a>
Monitor and joystick user pointers</h3>
<p >GLFW now supports setting and querying user pointers for connected monitors and joysticks with <a class="el" href="group__monitor.html#ga702750e24313a686d3637297b6e85fda">glfwSetMonitorUserPointer</a>, <a class="el" href="group__monitor.html#ga1adbfbfb8cd58b23cfee82e574fbbdc5">glfwGetMonitorUserPointer</a>, <a class="el" href="group__input.html#ga6b2f72d64d636b48a727b437cbb7489e">glfwSetJoystickUserPointer</a> and <a class="el" href="group__input.html#ga18cefd7265d1fa04f3fd38a6746db5f3">glfwGetJoystickUserPointer</a>.</p>
<p >For more information see <a class="el" href="monitor_guide.html#monitor_userptr">User pointer</a> and <a class="el" href="input_guide.html#joystick_userptr">Joystick user pointer</a>.</p>
<h3><a class="anchor" id="macos_nib_33"></a>
macOS menu bar from nib file</h3>
<p >GLFW will now load a <code>MainMenu.nib</code> file if found in the <code>Contents/Resources</code> directory of the application bundle, as a way to replace the GLFW menu bar without recompiling GLFW. This behavior can be disabled with the <a class="el" href="intro_guide.html#GLFW_COCOA_MENUBAR_hint">GLFW_COCOA_MENUBAR</a> initialization hint.</p>
<h3><a class="anchor" id="glext_33"></a>
Support for more context creation extensions</h3>
<p >The context hint <a class="el" href="window_guide.html#GLFW_SRGB_CAPABLE">GLFW_SRGB_CAPABLE</a> now supports OpenGL ES via <code>WGL_EXT_colorspace</code>, the context hint <a class="el" href="group__window.html#ga5a52fdfd46d8249c211f923675728082">GLFW_CONTEXT_NO_ERROR</a> now supports <code>WGL_ARB_create_context_no_error</code> and <code>GLX_ARB_create_context_no_error</code>, the context hint <a class="el" href="group__window.html#ga72b648a8378fe3310c7c7bbecc0f7be6">GLFW_CONTEXT_RELEASE_BEHAVIOR</a> now supports <code>EGL_KHR_context_flush_control</code> and <a class="el" href="group__context.html#ga35f1837e6f666781842483937612f163">glfwGetProcAddress</a> now supports <code>EGL_KHR_get_all_proc_addresses</code>.</p>
<h3><a class="anchor" id="osmesa_33"></a>
OSMesa off-screen context creation support</h3>
<p >GLFW now supports creating off-screen OpenGL contexts using <a href="https://www.mesa3d.org/osmesa.html">OSMesa</a> by setting <a class="el" href="window_guide.html#GLFW_CONTEXT_CREATION_API_hint">GLFW_CONTEXT_CREATION_API</a> to <code>GLFW_OSMESA_CONTEXT_API</code>. Native access function have been added to retrieve the OSMesa color and depth buffers.</p>
<p >There is also a new null backend that uses OSMesa as its native context creation API, intended for automated testing. This backend does not provide input.</p>
<h2><a class="anchor" id="caveats_33"></a>
Caveats for version 3.3</h2>
<h3><a class="anchor" id="joystick_layout_33"></a>
Layout of joysticks have changed</h3>
<p >The way joystick elements are arranged have changed to match SDL2 in order to support SDL_GameControllerDB mappings. The layout of joysticks may change again if required for compatibility with SDL2. If you need a known and stable layout for game controllers, see if you can switch to <a class="el" href="input_guide.html#gamepad">Gamepad input</a>.</p>
<p >Existing code that depends on a specific joystick layout will likely have to be updated.</p>
<h3><a class="anchor" id="wait_events_33"></a>
No window required to wait for events</h3>
<p >The <a class="el" href="group__window.html#ga554e37d781f0a997656c26b2c56c835e">glfwWaitEvents</a> and <a class="el" href="group__window.html#ga605a178db92f1a7f1a925563ef3ea2cf">glfwWaitEventsTimeout</a> functions no longer need a window to be created to wait for events. Before version 3.3 these functions would return immediately if there were no user-created windows. On platforms where only windows can receive events, an internal helper window is used.</p>
<p >Existing code that depends on the earlier behavior will likely have to be updated.</p>
<h3><a class="anchor" id="gamma_ramp_size_33"></a>
Gamma ramp size of 256 may be rejected</h3>
<p >The documentation for versions before 3.3 stated that a gamma ramp size of 256 would always be accepted. This was never the case on X11 and could lead to artifacts on macOS. The <a class="el" href="group__monitor.html#ga6ac582625c990220785ddd34efa3169a">glfwSetGamma</a> function has been updated to always generate a ramp of the correct size.</p>
<p >Existing code that hardcodes a size of 256 should be updated to use the size of the current ramp of a monitor when setting a new ramp for that monitor.</p>
<h3><a class="anchor" id="xinput_deadzone_33"></a>
Windows XInput deadzone removed</h3>
<p >GLFW no longer applies any deadzone to the input state received from the XInput API. This was never done for any other platform joystick API so this change makes the behavior more consistent but you will need to apply your own deadzone if desired.</p>
<h3><a class="anchor" id="x11_clipboard_33"></a>
X11 clipboard transfer limits</h3>
<p >GLFW now supports reading clipboard text via the <code>INCR</code> method, which removes the limit on how much text can be read with <a class="el" href="group__input.html#ga71a5b20808ea92193d65c21b82580355">glfwGetClipboardString</a>. However, writing via this method is not yet supported, so you may not be able to write a very large string with <a class="el" href="group__input.html#gaba1f022c5eb07dfac421df34cdcd31dd">glfwSetClipboardString</a> even if you read it from the clipboard earlier.</p>
<p >The exact size limit for writing to the clipboard is negotiated with each receiving application but is at least several tens of kilobytes. Note that only the read limit has changed. Any string that could be written before still can be.</p>
<h3><a class="anchor" id="x11_linking_33"></a>
X11 extension libraries are loaded dynamically</h3>
<p >GLFW now loads all X11 extension libraries at initialization. The only X11 library you need to link against is <code>libX11</code>. The header files for the extension libraries are still required for compilation.</p>
<p >Existing projects and makefiles that link GLFW directly against the extension libraries should still build correctly but will add these libraries as load-time dependencies.</p>
<h3><a class="anchor" id="cmake_version_33"></a>
CMake 3.0 or later is required</h3>
<p >The minimum CMake version has been raised from 2.8.12 to 3.0. This is only a requirement of the GLFW CMake files. The GLFW source files do not depend on CMake.</p>
<h3><a class="anchor" id="caveat_fbtransparency_33"></a>
Framebuffer transparency requires DWM transparency</h3>
<p >GLFW no longer supports framebuffer transparency enabled via <a class="el" href="group__window.html#ga60a0578c3b9449027d683a9c6abb9f14">GLFW_TRANSPARENT_FRAMEBUFFER</a> on Windows 7 if DWM transparency is off (the Transparency setting under Personalization &gt; Window Color).</p>
<h2><a class="anchor" id="deprecations_33"></a>
Deprecations in version 3.3</h2>
<h3><a class="anchor" id="charmods_callback_33"></a>
Character with modifiers callback</h3>
<p >The character with modifiers callback set with <a class="el" href="group__input.html#ga0b7f4ad13c2b17435ff13b6dcfb4e43c">glfwSetCharModsCallback</a> has been deprecated and should if possible not be used.</p>
<p >Existing code should still work but further bug fixes will likely not be made. The callback will be removed in the next major version.</p>
<h3><a class="anchor" id="clipboard_window_33"></a>
Window parameter to clipboard functions</h3>
<p >The window parameter of the clipboard functions <a class="el" href="group__input.html#ga71a5b20808ea92193d65c21b82580355">glfwGetClipboardString</a> and <a class="el" href="group__input.html#gaba1f022c5eb07dfac421df34cdcd31dd">glfwSetClipboardString</a> has been deprecated and is no longer used on any platform. On platforms where the clipboard must be owned by a specific window, an internal helper window is used.</p>
<p >Existing code should still work unless it depends on a specific window owning the clipboard. New code may pass <code>NULL</code> as the window argument. The parameter will be removed in a future release.</p>
<h2><a class="anchor" id="removals_33"></a>
Removals in 3.3</h2>
<h3><a class="anchor" id="macos_options_33"></a>
macOS specific CMake options and macros</h3>
<p >The <code>GLFW_USE_RETINA</code>, <code>GLFW_USE_CHDIR</code> and <code>GLFW_USE_MENUBAR</code> CMake options and the <code>_GLFW_USE_RETINA</code>, <code>_GLFW_USE_CHDIR</code> and <code>_GLFW_USE_MENUBAR</code> compile-time macros have been removed.</p>
<p >These options and macros are replaced by the window hint <a class="el" href="window_guide.html#GLFW_COCOA_RETINA_FRAMEBUFFER_hint">GLFW_COCOA_RETINA_FRAMEBUFFER</a> and the init hints <a class="el" href="intro_guide.html#GLFW_COCOA_CHDIR_RESOURCES_hint">GLFW_COCOA_CHDIR_RESOURCES</a> and <a class="el" href="intro_guide.html#GLFW_COCOA_MENUBAR_hint">GLFW_COCOA_MENUBAR</a>.</p>
<p >Existing projects and makefiles that set these options or define these macros during compilation of GLFW will still build but it will have no effect and the default behaviors will be used.</p>
<h3><a class="anchor" id="vulkan_sdk_33"></a>
LunarG Vulkan SDK dependency</h3>
<p >The GLFW test programs that previously depended on the LunarG Vulkan SDK now instead uses a Vulkan loader generated by <a href="https://github.com/Dav1dde/glad">glad2</a>. This means the GLFW CMake files no longer look for the Vulkan SDK.</p>
<p >Existing CMake projects that depended on the Vulkan SDK cache variables from GLFW will need to call <code>find_package(Vulkan)</code> themselves. CMake 3.7 and later already comes with a <a href="https://cmake.org/cmake/help/latest/module/FindVulkan.html">Vulkan find module</a> similar to the one GLFW previously included.</p>
<h3><a class="anchor" id="lib_suffix_33"></a>
CMake option LIB_SUFFIX</h3>
<p >The <code>LIB_SUFFIX</code> CMake option has been removed. GLFW now uses the GNUInstallDirs CMake package to handle platform specific details like the library directory suffix and the <code>LIB_SUFFIX</code> CMake option has been removed.</p>
<p >Existing projects and makefiles that set the <code>LIB_SUFFIX</code> option will use the suffix chosen by the GNUInstallDirs package and the option will be ignored.</p>
<h3><a class="anchor" id="mir_removed_33"></a>
Mir support</h3>
<p >The experimental Mir support has been completely removed as the Mir project has implemented support for the Wayland protocol and is recommending that applications use that instead.</p>
<p >Existing projects and makefiles that select Mir when compiling GLFW will fail. Use Wayland or X11 instead.</p>
<h2><a class="anchor" id="symbols_33"></a>
New symbols in version 3.3</h2>
<h3><a class="anchor" id="functions_33"></a>
New functions in version 3.3</h3>
<ul>
<li><a class="el" href="group__init.html#ga110fd1d3f0412822b4f1908c026f724a">glfwInitHint</a></li>
<li><a class="el" href="group__init.html#ga944986b4ec0b928d488141f92982aa18">glfwGetError</a></li>
<li><a class="el" href="group__monitor.html#ga7387a3bdb64bfe8ebf2b9e54f5b6c9d0">glfwGetMonitorWorkarea</a></li>
<li><a class="el" href="group__monitor.html#gad3152e84465fa620b601265ebfcdb21b">glfwGetMonitorContentScale</a></li>
<li><a class="el" href="group__monitor.html#ga1adbfbfb8cd58b23cfee82e574fbbdc5">glfwGetMonitorUserPointer</a></li>
<li><a class="el" href="group__monitor.html#ga702750e24313a686d3637297b6e85fda">glfwSetMonitorUserPointer</a></li>
<li><a class="el" href="group__window.html#ga8cb2782861c9d997bcf2dea97f363e5f">glfwWindowHintString</a></li>
<li><a class="el" href="group__window.html#gaf5d31de9c19c4f994facea64d2b3106c">glfwGetWindowContentScale</a></li>
<li><a class="el" href="group__window.html#gad09f0bd7a6307c4533b7061828480a84">glfwGetWindowOpacity</a></li>
<li><a class="el" href="group__window.html#gac31caeb3d1088831b13d2c8a156802e9">glfwSetWindowOpacity</a></li>
<li><a class="el" href="group__window.html#ga2f8d59323fc4692c1d54ba08c863a703">glfwRequestWindowAttention</a></li>
<li><a class="el" href="group__window.html#gace2afda29b4116ec012e410a6819033e">glfwSetWindowAttrib</a></li>
<li><a class="el" href="group__window.html#gacbe64c339fbd94885e62145563b6dc93">glfwSetWindowMaximizeCallback</a></li>
<li><a class="el" href="group__window.html#gaf2832ebb5aa6c252a2d261de002c92d6">glfwSetWindowContentScaleCallback</a></li>
<li><a class="el" href="group__input.html#gae4ee0dbd0d256183e1ea4026d897e1c2">glfwRawMouseMotionSupported</a></li>
<li><a class="el" href="group__input.html#ga67ddd1b7dcbbaff03e4a76c0ea67103a">glfwGetKeyScancode</a></li>
<li><a class="el" href="group__input.html#ga06e660841b3e79c54da4f54a932c5a2c">glfwGetJoystickHats</a></li>
<li><a class="el" href="group__input.html#ga6659411aec3c7fcef27780e2cb2d9600">glfwGetJoystickGUID</a></li>
<li><a class="el" href="group__input.html#ga18cefd7265d1fa04f3fd38a6746db5f3">glfwGetJoystickUserPointer</a></li>
<li><a class="el" href="group__input.html#ga6b2f72d64d636b48a727b437cbb7489e">glfwSetJoystickUserPointer</a></li>
<li><a class="el" href="group__input.html#gad0f676860f329d80f7e47e9f06a96f00">glfwJoystickIsGamepad</a></li>
<li><a class="el" href="group__input.html#gaed5104612f2fa8e66aa6e846652ad00f">glfwUpdateGamepadMappings</a></li>
<li><a class="el" href="group__input.html#ga8aea73a1a25cc6c0486a617019f56728">glfwGetGamepadName</a></li>
<li><a class="el" href="group__input.html#gadccddea8bce6113fa459de379ddaf051">glfwGetGamepadState</a></li>
</ul>
<h3><a class="anchor" id="types_33"></a>
New types in version 3.3</h3>
<ul>
<li><a class="el" href="group__window.html#ga3017196fdaec33ac3e095765176c2a90">GLFWwindowmaximizefun</a></li>
<li><a class="el" href="group__window.html#ga77f288a2d04bb3c77c7d9615d08cf70e">GLFWwindowcontentscalefun</a></li>
<li><a class="el" href="structGLFWgamepadstate.html">GLFWgamepadstate</a></li>
</ul>
<h3><a class="anchor" id="constants_33"></a>
New constants in version 3.3</h3>
<ul>
<li><a class="el" href="group__errors.html#gafa30deee5db4d69c4c93d116ed87dbf4">GLFW_NO_ERROR</a></li>
<li><a class="el" href="intro_guide.html#GLFW_JOYSTICK_HAT_BUTTONS">GLFW_JOYSTICK_HAT_BUTTONS</a></li>
<li><a class="el" href="group__init.html#gab937983147a3158d45f88fad7129d9f2">GLFW_COCOA_CHDIR_RESOURCES</a></li>
<li><a class="el" href="group__init.html#ga71e0b4ce2f2696a84a9b8c5e12dc70cf">GLFW_COCOA_MENUBAR</a></li>
<li><a class="el" href="group__window.html#ga5ac0847c0aa0b3619f2855707b8a7a77">GLFW_CENTER_CURSOR</a></li>
<li><a class="el" href="group__window.html#ga60a0578c3b9449027d683a9c6abb9f14">GLFW_TRANSPARENT_FRAMEBUFFER</a></li>
<li><a class="el" href="group__window.html#ga8665c71c6fa3d22425c6a0e8a3f89d8a">GLFW_HOVERED</a></li>
<li><a class="el" href="group__window.html#gafa94b1da34bfd6488c0d709761504dfc">GLFW_FOCUS_ON_SHOW</a></li>
<li><a class="el" href="window_guide.html#GLFW_SCALE_TO_MONITOR">GLFW_SCALE_TO_MONITOR</a></li>
<li><a class="el" href="group__window.html#gab6ef2d02eb55800d249ccf1af253c35e">GLFW_COCOA_RETINA_FRAMEBUFFER</a></li>
<li><a class="el" href="group__window.html#ga70fa0fbc745de6aa824df79a580e84b5">GLFW_COCOA_FRAME_NAME</a></li>
<li><a class="el" href="group__window.html#ga53c84ed2ddd94e15bbd44b1f6f7feafc">GLFW_COCOA_GRAPHICS_SWITCHING</a></li>
<li><a class="el" href="group__window.html#gae5a9ea2fccccd92edbd343fc56461114">GLFW_X11_CLASS_NAME</a></li>
<li><a class="el" href="group__window.html#ga494c3c0d911e4b860b946530a3e389e8">GLFW_X11_INSTANCE_NAME</a></li>
<li><a class="el" href="glfw3_8h.html#afd34a473af9fa81f317910ea371b19e3">GLFW_OSMESA_CONTEXT_API</a></li>
<li><a class="el" href="group__hat__state.html#gae2c0bcb7aec609e4736437554f6638fd">GLFW_HAT_CENTERED</a></li>
<li><a class="el" href="group__hat__state.html#ga8c9720c76cd1b912738159ed74c85b36">GLFW_HAT_UP</a></li>
<li><a class="el" href="group__hat__state.html#ga252586e3bbde75f4b0e07ad3124867f5">GLFW_HAT_RIGHT</a></li>
<li><a class="el" href="group__hat__state.html#gad60d1fd0dc85c18f2642cbae96d3deff">GLFW_HAT_DOWN</a></li>
<li><a class="el" href="group__hat__state.html#gac775f4b3154fdf5db93eb432ba546dff">GLFW_HAT_LEFT</a></li>
<li><a class="el" href="group__hat__state.html#ga94aea0ae241a8b902883536c592ee693">GLFW_HAT_RIGHT_UP</a></li>
<li><a class="el" href="group__hat__state.html#gad7f0e4f52fd68d734863aaeadab3a3f5">GLFW_HAT_RIGHT_DOWN</a></li>
<li><a class="el" href="group__hat__state.html#ga638f0e20dc5de90de21a33564e8ce129">GLFW_HAT_LEFT_UP</a></li>
<li><a class="el" href="group__hat__state.html#ga76c02baf1ea345fcbe3e8ff176a73e19">GLFW_HAT_LEFT_DOWN</a></li>
<li><a class="el" href="group__mods.html#gaefeef8fcf825a6e43e241b337897200f">GLFW_MOD_CAPS_LOCK</a></li>
<li><a class="el" href="group__mods.html#ga64e020b8a42af8376e944baf61feecbe">GLFW_MOD_NUM_LOCK</a></li>
<li><a class="el" href="input_guide.html#GLFW_LOCK_KEY_MODS">GLFW_LOCK_KEY_MODS</a></li>
<li><a class="el" href="input_guide.html#GLFW_RAW_MOUSE_MOTION">GLFW_RAW_MOUSE_MOTION</a></li>
<li><a class="el" href="group__gamepad__buttons.html#gae055a12fbf4b48b5954c8e1cd129b810">GLFW_GAMEPAD_BUTTON_A</a></li>
<li><a class="el" href="group__gamepad__buttons.html#ga2228a6512fd5950cdb51ba07846546fa">GLFW_GAMEPAD_BUTTON_B</a></li>
<li><a class="el" href="group__gamepad__buttons.html#ga52cc94785cf3fe9a12e246539259887c">GLFW_GAMEPAD_BUTTON_X</a></li>
<li><a class="el" href="group__gamepad__buttons.html#gafc931248bda494b530cbe057f386a5ed">GLFW_GAMEPAD_BUTTON_Y</a></li>
<li><a class="el" href="group__gamepad__buttons.html#ga17d67b4f39a39d6b813bd1567a3507c3">GLFW_GAMEPAD_BUTTON_LEFT_BUMPER</a></li>
<li><a class="el" href="group__gamepad__buttons.html#gadfbc9ea9bf3aae896b79fa49fdc85c7f">GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER</a></li>
<li><a class="el" href="group__gamepad__buttons.html#gabc7c0264ce778835b516a472b47f6caf">GLFW_GAMEPAD_BUTTON_BACK</a></li>
<li><a class="el" href="group__gamepad__buttons.html#ga04606949dd9139434b8a1bedf4ac1021">GLFW_GAMEPAD_BUTTON_START</a></li>
<li><a class="el" href="group__gamepad__buttons.html#ga7fa48c32e5b2f5db2f080aa0b8b573dc">GLFW_GAMEPAD_BUTTON_GUIDE</a></li>
<li><a class="el" href="group__gamepad__buttons.html#ga3e089787327454f7bfca7364d6ca206a">GLFW_GAMEPAD_BUTTON_LEFT_THUMB</a></li>
<li><a class="el" href="group__gamepad__buttons.html#ga1c003f52b5aebb45272475b48953b21a">GLFW_GAMEPAD_BUTTON_RIGHT_THUMB</a></li>
<li><a class="el" href="group__gamepad__buttons.html#ga4f1ed6f974a47bc8930d4874a283476a">GLFW_GAMEPAD_BUTTON_DPAD_UP</a></li>
<li><a class="el" href="group__gamepad__buttons.html#gae2a780d2a8c79e0b77c0b7b601ca57c6">GLFW_GAMEPAD_BUTTON_DPAD_RIGHT</a></li>
<li><a class="el" href="group__gamepad__buttons.html#ga8f2b731b97d80f90f11967a83207665c">GLFW_GAMEPAD_BUTTON_DPAD_DOWN</a></li>
<li><a class="el" href="group__gamepad__buttons.html#gaf0697e0e8607b2ebe1c93b0c6befe301">GLFW_GAMEPAD_BUTTON_DPAD_LEFT</a></li>
<li><a class="el" href="group__gamepad__buttons.html#ga5cc98882f4f81dacf761639a567f61eb">GLFW_GAMEPAD_BUTTON_LAST</a></li>
<li><a class="el" href="group__gamepad__buttons.html#gaf08d0df26527c9305253422bd98ed63a">GLFW_GAMEPAD_BUTTON_CROSS</a></li>
<li><a class="el" href="group__gamepad__buttons.html#gaaef094b3dacbf15f272b274516839b82">GLFW_GAMEPAD_BUTTON_CIRCLE</a></li>
<li><a class="el" href="group__gamepad__buttons.html#gafc7821e87d77d41ed2cd3e1f726ec35f">GLFW_GAMEPAD_BUTTON_SQUARE</a></li>
<li><a class="el" href="group__gamepad__buttons.html#ga3a7ef6bcb768a08cd3bf142f7f09f802">GLFW_GAMEPAD_BUTTON_TRIANGLE</a></li>
<li><a class="el" href="group__gamepad__axes.html#ga544e396d092036a7d80c1e5f233f7a38">GLFW_GAMEPAD_AXIS_LEFT_X</a></li>
<li><a class="el" href="group__gamepad__axes.html#ga64dcf2c6e9be50b7c556ff7671996dd5">GLFW_GAMEPAD_AXIS_LEFT_Y</a></li>
<li><a class="el" href="group__gamepad__axes.html#gabd6785106cd3c5a044a6e49a395ee2fc">GLFW_GAMEPAD_AXIS_RIGHT_X</a></li>
<li><a class="el" href="group__gamepad__axes.html#ga1cc20566d44d521b7183681a8e88e2e4">GLFW_GAMEPAD_AXIS_RIGHT_Y</a></li>
<li><a class="el" href="group__gamepad__axes.html#ga6d79561dd8907c37354426242901b86e">GLFW_GAMEPAD_AXIS_LEFT_TRIGGER</a></li>
<li><a class="el" href="group__gamepad__axes.html#ga121a7d5d20589a423cd1634dd6ee6eab">GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER</a></li>
<li><a class="el" href="group__gamepad__axes.html#ga0818fd9433e1359692b7443293e5ac86">GLFW_GAMEPAD_AXIS_LAST</a></li>
</ul>
<h1><a class="anchor" id="news_32"></a>
Release notes for 3.2</h1>
<p >These are the release notes for version 3.2. For a more detailed view including all fixed bugs see the <a href="https://www.glfw.org/changelog.html">version history</a>.</p>
<h2><a class="anchor" id="features_32"></a>
New features in version 3.2</h2>
<h3><a class="anchor" id="news_32_vulkan"></a>
Support for Vulkan</h3>
<p >GLFW now supports basic integration with Vulkan with <a class="el" href="group__vulkan.html#ga2e7f30931e02464b5bc8d0d4b6f9fe2b">glfwVulkanSupported</a>, <a class="el" href="group__vulkan.html#ga99ad342d82f4a3421e2864978cb6d1d6">glfwGetRequiredInstanceExtensions</a>, <a class="el" href="group__vulkan.html#gadf228fac94c5fd8f12423ec9af9ff1e9">glfwGetInstanceProcAddress</a>, <a class="el" href="group__vulkan.html#gaff3823355cdd7e2f3f9f4d9ea9518d92">glfwGetPhysicalDevicePresentationSupport</a> and <a class="el" href="group__vulkan.html#ga1a24536bec3f80b08ead18e28e6ae965">glfwCreateWindowSurface</a>. Vulkan header inclusion can be selected with <a class="el" href="build_guide.html#GLFW_INCLUDE_VULKAN">GLFW_INCLUDE_VULKAN</a>.</p>
<h3><a class="anchor" id="news_32_setwindowmonitor"></a>
Window mode switching</h3>
<p >GLFW now supports switching between windowed and full screen modes and updating the monitor and desired resolution and refresh rate of full screen windows with <a class="el" href="group__window.html#ga81c76c418af80a1cce7055bccb0ae0a7">glfwSetWindowMonitor</a>.</p>
<h3><a class="anchor" id="news_32_maximize"></a>
Window maxmimization support</h3>
<p >GLFW now supports window maximization with <a class="el" href="group__window.html#ga3f541387449d911274324ae7f17ec56b">glfwMaximizeWindow</a> and the <a class="el" href="group__window.html#gad8ccb396253ad0b72c6d4c917eb38a03">GLFW_MAXIMIZED</a> window hint and attribute.</p>
<h3><a class="anchor" id="news_32_focus"></a>
Window input focus control</h3>
<p >GLFW now supports giving windows input focus with <a class="el" href="group__window.html#ga873780357abd3f3a081d71a40aae45a1">glfwFocusWindow</a>.</p>
<h3><a class="anchor" id="news_32_sizelimits"></a>
Window size limit support</h3>
<p >GLFW now supports setting both absolute and relative window size limits with <a class="el" href="group__window.html#gac314fa6cec7d2d307be9963e2709cc90">glfwSetWindowSizeLimits</a> and <a class="el" href="group__window.html#ga72ac8cb1ee2e312a878b55153d81b937">glfwSetWindowAspectRatio</a>.</p>
<h3><a class="anchor" id="news_32_keyname"></a>
Localized key names</h3>
<p >GLFW now supports querying the localized name of printable keys with <a class="el" href="group__input.html#gaeaed62e69c3bd62b7ff8f7b19913ce4f">glfwGetKeyName</a>, either by key token or by scancode.</p>
<h3><a class="anchor" id="news_32_waittimeout"></a>
Wait for events with timeout</h3>
<p >GLFW now supports waiting for events for a set amount of time with <a class="el" href="group__window.html#ga605a178db92f1a7f1a925563ef3ea2cf">glfwWaitEventsTimeout</a>.</p>
<h3><a class="anchor" id="news_32_icon"></a>
Window icon support</h3>
<p >GLFW now supports setting the icon of windows with <a class="el" href="group__window.html#gadd7ccd39fe7a7d1f0904666ae5932dc5">glfwSetWindowIcon</a>.</p>
<h3><a class="anchor" id="news_32_timer"></a>
Raw timer access</h3>
<p >GLFW now supports raw timer values with <a class="el" href="group__input.html#ga09b2bd37d328e0b9456c7ec575cc26aa">glfwGetTimerValue</a> and <a class="el" href="group__input.html#ga3289ee876572f6e91f06df3a24824443">glfwGetTimerFrequency</a>.</p>
<h3><a class="anchor" id="news_32_joystick"></a>
Joystick connection callback</h3>
<p >GLFW now supports notifying when a joystick has been connected or disconnected with <a class="el" href="group__input.html#ga2f60a0e5b7bd8d1b7344dc0a7cb32b4c">glfwSetJoystickCallback</a>.</p>
<h3><a class="anchor" id="news_32_noapi"></a>
Context-less windows</h3>
<p >GLFW now supports creating windows without a OpenGL or OpenGL ES context by setting the <a class="el" href="window_guide.html#GLFW_CLIENT_API_hint">GLFW_CLIENT_API</a> hint to <code>GLFW_NO_API</code>.</p>
<h3><a class="anchor" id="news_32_contextapi"></a>
Run-time context creation API selection</h3>
<p >GLFW now supports selecting and querying the context creation API at run-time with the <a class="el" href="group__window.html#ga5154cebfcd831c1cc63a4d5ac9bb4486">GLFW_CONTEXT_CREATION_API</a> hint and attribute.</p>
<h3><a class="anchor" id="news_32_noerror"></a>
Error-free context creation</h3>
<p >GLFW now supports creating and querying OpenGL and OpenGL ES contexts that do not emit errors with the <a class="el" href="group__window.html#ga5a52fdfd46d8249c211f923675728082">GLFW_CONTEXT_NO_ERROR</a> hint, provided the machine supports the <code>GL_KHR_no_error</code> extension.</p>
<h3><a class="anchor" id="news_32_cmake"></a>
CMake config-file package support</h3>
<p >GLFW now supports being used as a <a class="el" href="build_guide.html#build_link_cmake_package">config-file package</a> from other projects for easy linking with the library and its dependencies.</p>
<h1><a class="anchor" id="news_31"></a>
Release notes for 3.1</h1>
<p >These are the release notes for version 3.1. For a more detailed view including all fixed bugs see the <a href="https://www.glfw.org/changelog.html">version history</a>.</p>
<h2><a class="anchor" id="features_31"></a>
New features in version 3.1</h2>
<h3><a class="anchor" id="news_31_cursor"></a>
Custom mouse cursor images</h3>
<p >GLFW now supports creating and setting both custom cursor images and standard cursor shapes. They are created with <a class="el" href="group__input.html#ga556f604f73af156c0db0e97c081373c3">glfwCreateCursor</a> or <a class="el" href="group__input.html#gaf2fb2eb2c9dd842d1cef8a34e3c6403e">glfwCreateStandardCursor</a>, set with <a class="el" href="group__input.html#gad3b4f38c8d5dae036bc8fa959e18343e">glfwSetCursor</a> and destroyed with <a class="el" href="group__input.html#ga81b952cd1764274d0db7fb3c5a79ba6a">glfwDestroyCursor</a>.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="input_guide.html#cursor_object">Cursor objects</a></dd></dl>
<h3><a class="anchor" id="news_31_drop"></a>
Path drop event</h3>
<p >GLFW now provides a callback for receiving the paths of files and directories dropped onto GLFW windows. The callback is set with <a class="el" href="group__input.html#gab773f0ee0a07cff77a210cea40bc1f6b">glfwSetDropCallback</a>.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="input_guide.html#path_drop">Path drop input</a></dd></dl>
<h3><a class="anchor" id="news_31_emptyevent"></a>
Main thread wake-up</h3>
<p >GLFW now provides the <a class="el" href="group__window.html#gab5997a25187e9fd5c6f2ecbbc8dfd7e9">glfwPostEmptyEvent</a> function for posting an empty event from another thread to the main thread event queue, causing <a class="el" href="group__window.html#ga554e37d781f0a997656c26b2c56c835e">glfwWaitEvents</a> to return.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="input_guide.html#events">Event processing</a></dd></dl>
<h3><a class="anchor" id="news_31_framesize"></a>
Window frame size query</h3>
<p >GLFW now supports querying the size, on each side, of the frame around the content area of a window, with <a class="el" href="group__window.html#ga1a9fd382058c53101b21cf211898f1f1">glfwGetWindowFrameSize</a>.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="window_guide.html#window_size">Window size</a></dd></dl>
<h3><a class="anchor" id="news_31_autoiconify"></a>
Simultaneous multi-monitor rendering</h3>
<p >GLFW now supports disabling auto-iconification of full screen windows with the <a class="el" href="window_guide.html#GLFW_AUTO_ICONIFY_hint">GLFW_AUTO_ICONIFY</a> window hint. This is intended for people building multi-monitor installations, where you need windows to stay in full screen despite losing input focus.</p>
<h3><a class="anchor" id="news_31_floating"></a>
Floating windows</h3>
<p >GLFW now supports floating windows, also called topmost or always on top, for easier debugging with the <a class="el" href="group__window.html#ga7fb0be51407783b41adbf5bec0b09d80">GLFW_FLOATING</a> window hint and attribute.</p>
<h3><a class="anchor" id="news_31_focused"></a>
Initially unfocused windows</h3>
<p >GLFW now supports preventing a windowed mode window from gaining input focus on creation, with the <a class="el" href="window_guide.html#GLFW_FOCUSED_hint">GLFW_FOCUSED</a> window hint.</p>
<h3><a class="anchor" id="news_31_direct"></a>
Direct access for window attributes and cursor position</h3>
<p >GLFW now queries the window input focus, visibility and iconification attributes and the cursor position directly instead of returning cached data.</p>
<h3><a class="anchor" id="news_31_charmods"></a>
Character with modifiers callback</h3>
<p >GLFW now provides a callback for character events with modifier key bits. The callback is set with <a class="el" href="group__input.html#ga0b7f4ad13c2b17435ff13b6dcfb4e43c">glfwSetCharModsCallback</a>. Unlike the regular character callback, this will report character events that will not result in a character being input, for example if the Control key is held down.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="input_guide.html#input_char">Text input</a></dd></dl>
<h3><a class="anchor" id="news_31_single"></a>
Single buffered framebuffers</h3>
<p >GLFW now supports the creation of single buffered windows, with the <a class="el" href="window_guide.html#GLFW_DOUBLEBUFFER">GLFW_DOUBLEBUFFER</a> hint.</p>
<h3><a class="anchor" id="news_31_glext"></a>
Macro for including extension header</h3>
<p >GLFW now includes the extension header appropriate for the chosen OpenGL or OpenGL ES header when <a class="el" href="build_guide.html#GLFW_INCLUDE_GLEXT">GLFW_INCLUDE_GLEXT</a> is defined. GLFW does not provide these headers. They must be provided by your development environment or your OpenGL or OpenGL ES SDK.</p>
<h3><a class="anchor" id="news_31_release"></a>
Context release behaviors</h3>
<p >GLFW now supports controlling and querying whether the pipeline is flushed when a context is made non-current, with the <a class="el" href="group__window.html#ga72b648a8378fe3310c7c7bbecc0f7be6">GLFW_CONTEXT_RELEASE_BEHAVIOR</a> hint and attribute, provided the machine supports the <code>GL_KHR_context_flush_control</code> extension.</p>
<h3><a class="anchor" id="news_31_wayland"></a>
(Experimental) Wayland support</h3>
<p >GLFW now has an <em>experimental</em> Wayland display protocol backend that can be selected on Linux with a CMake option.</p>
<h3><a class="anchor" id="news_31_mir"></a>
(Experimental) Mir support</h3>
<p >GLFW now has an <em>experimental</em> Mir display server backend that can be selected on Linux with a CMake option.</p>
<h1><a class="anchor" id="news_30"></a>
Release notes for 3.0</h1>
<p >These are the release notes for version 3.0. For a more detailed view including all fixed bugs see the <a href="https://www.glfw.org/changelog.html">version history</a>.</p>
<h2><a class="anchor" id="features_30"></a>
New features in version 3.0</h2>
<h3><a class="anchor" id="news_30_cmake"></a>
CMake build system</h3>
<p >GLFW now uses the CMake build system instead of the various makefiles and project files used by earlier versions. CMake is available for all platforms supported by GLFW, is present in most package systems and can generate makefiles and/or project files for most popular development environments.</p>
<p >For more information on how to use CMake, see the <a href="https://cmake.org/cmake/help/documentation.html">CMake manual</a>.</p>
<h3><a class="anchor" id="news_30_multiwnd"></a>
Multi-window support</h3>
<p >GLFW now supports the creation of multiple windows, each with their own OpenGL or OpenGL ES context, and all window functions now take a window handle. Event callbacks are now per-window and are provided with the handle of the window that received the event. The <a class="el" href="group__context.html#ga1c04dc242268f827290fe40aa1c91157">glfwMakeContextCurrent</a> function has been added to select which context is current on a given thread.</p>
<h3><a class="anchor" id="news_30_multimon"></a>
Multi-monitor support</h3>
<p >GLFW now explicitly supports multiple monitors. They can be enumerated with <a class="el" href="group__monitor.html#ga70b1156d5d24e9928f145d6c864369d2">glfwGetMonitors</a>, queried with <a class="el" href="group__monitor.html#gad2e24d2843cb7d6c26202cddd530fc1b">glfwGetVideoModes</a>, <a class="el" href="group__monitor.html#ga102f54e7acc9149edbcf0997152df8c9">glfwGetMonitorPos</a>, <a class="el" href="group__monitor.html#ga7af83e13489d90379588fb331b9e4b68">glfwGetMonitorName</a> and <a class="el" href="group__monitor.html#ga7d8bffc6c55539286a6bd20d32a8d7ea">glfwGetMonitorPhysicalSize</a>, and specified at window creation to make the newly created window full screen on that specific monitor.</p>
<h3><a class="anchor" id="news_30_unicode"></a>
Unicode support</h3>
<p >All string arguments to GLFW functions and all strings returned by GLFW now use the UTF-8 encoding. This includes the window title, error string, clipboard text, monitor and joystick names as well as the extension function arguments (as ASCII is a subset of UTF-8).</p>
<h3><a class="anchor" id="news_30_clipboard"></a>
Clipboard text I/O</h3>
<p >GLFW now supports reading and writing plain text to and from the system clipboard, with the <a class="el" href="group__input.html#ga71a5b20808ea92193d65c21b82580355">glfwGetClipboardString</a> and <a class="el" href="group__input.html#gaba1f022c5eb07dfac421df34cdcd31dd">glfwSetClipboardString</a> functions.</p>
<h3><a class="anchor" id="news_30_gamma"></a>
Gamma ramp support</h3>
<p >GLFW now supports setting and reading back the gamma ramp of monitors, with the <a class="el" href="group__monitor.html#ga76ba90debcf0062b5c4b73052b24f96f">glfwGetGammaRamp</a> and <a class="el" href="group__monitor.html#ga583f0ffd0d29613d8cd172b996bbf0dd">glfwSetGammaRamp</a> functions. There is also <a class="el" href="group__monitor.html#ga6ac582625c990220785ddd34efa3169a">glfwSetGamma</a>, which generates a ramp from a gamma value and then sets it.</p>
<h3><a class="anchor" id="news_30_gles"></a>
OpenGL ES support</h3>
<p >GLFW now supports the creation of OpenGL ES contexts, by setting the <a class="el" href="window_guide.html#GLFW_CLIENT_API_hint">GLFW_CLIENT_API</a> hint to <code>GLFW_OPENGL_ES_API</code>, where creation of such contexts are supported. Note that GLFW <em>does not implement</em> OpenGL ES, so your driver must provide support in a way usable by GLFW. Modern Nvidia and Intel drivers support creation of OpenGL ES context using the GLX and WGL APIs, while AMD provides an EGL implementation instead.</p>
<h3><a class="anchor" id="news_30_egl"></a>
(Experimental) EGL support</h3>
<p >GLFW now has an experimental EGL context creation back end that can be selected through CMake options.</p>
<h3><a class="anchor" id="news_30_hidpi"></a>
High-DPI support</h3>
<p >GLFW now supports high-DPI monitors on both Windows and macOS, giving windows full resolution framebuffers where other UI elements are scaled up. To achieve this, <a class="el" href="group__window.html#ga0e2637a4161afb283f5300c7f94785c9">glfwGetFramebufferSize</a> and <a class="el" href="group__window.html#gab3fb7c3366577daef18c0023e2a8591f">glfwSetFramebufferSizeCallback</a> have been added. These work with pixels, while the rest of the GLFW API works with screen coordinates. This is important as OpenGL uses pixels, not screen coordinates.</p>
<h3><a class="anchor" id="news_30_error"></a>
Error callback</h3>
<p >GLFW now has an error callback, which can provide your application with much more detailed diagnostics than was previously possible. The callback is passed an error code and a description string.</p>
<h3><a class="anchor" id="news_30_wndptr"></a>
Per-window user pointer</h3>
<p >Each window now has a user-defined pointer, retrieved with <a class="el" href="group__window.html#gae77a4add0d2023ca21ff1443ced01653">glfwGetWindowUserPointer</a> and set with <a class="el" href="group__window.html#ga3d2fc6026e690ab31a13f78bc9fd3651">glfwSetWindowUserPointer</a>, to make it easier to integrate GLFW into C++ code.</p>
<h3><a class="anchor" id="news_30_iconifyfun"></a>
Window iconification callback</h3>
<p >Each window now has a callback for iconification and restoration events, which is set with <a class="el" href="group__window.html#gac793e9efd255567b5fb8b445052cfd3e">glfwSetWindowIconifyCallback</a>.</p>
<h3><a class="anchor" id="news_30_wndposfun"></a>
Window position callback</h3>
<p >Each window now has a callback for position events, which is set with <a class="el" href="group__window.html#ga08bdfbba88934f9c4f92fd757979ac74">glfwSetWindowPosCallback</a>.</p>
<h3><a class="anchor" id="news_30_wndpos"></a>
Window position query</h3>
<p >The position of a window can now be retrieved using <a class="el" href="group__window.html#ga73cb526c000876fd8ddf571570fdb634">glfwGetWindowPos</a>.</p>
<h3><a class="anchor" id="news_30_focusfun"></a>
Window focus callback</h3>
<p >Each windows now has a callback for focus events, which is set with <a class="el" href="group__window.html#gac2d83c4a10f071baf841f6730528e66c">glfwSetWindowFocusCallback</a>.</p>
<h3><a class="anchor" id="news_30_enterleave"></a>
Cursor enter/leave callback</h3>
<p >Each window now has a callback for when the mouse cursor enters or leaves its content area, which is set with <a class="el" href="group__input.html#gad27f8ad0142c038a281466c0966817d8">glfwSetCursorEnterCallback</a>.</p>
<h3><a class="anchor" id="news_30_wndtitle"></a>
Initial window title</h3>
<p >The title of a window is now specified at creation time, as one of the arguments to <a class="el" href="group__window.html#ga3555a418df92ad53f917597fe2f64aeb">glfwCreateWindow</a>.</p>
<h3><a class="anchor" id="news_30_hidden"></a>
Hidden windows</h3>
<p >Windows can now be hidden with <a class="el" href="group__window.html#ga49401f82a1ba5f15db5590728314d47c">glfwHideWindow</a>, shown using <a class="el" href="group__window.html#ga61be47917b72536a148300f46494fc66">glfwShowWindow</a> and created initially hidden with the <a class="el" href="group__window.html#gafb3cdc45297e06d8f1eb13adc69ca6c4">GLFW_VISIBLE</a> window hint and attribute. This allows for off-screen rendering in a way compatible with most drivers, as well as moving a window to a specific position before showing it.</p>
<h3><a class="anchor" id="news_30_undecorated"></a>
Undecorated windows</h3>
<p >Windowed mode windows can now be created without decorations, e.g. things like a frame, a title bar, with the <a class="el" href="group__window.html#ga21b854d36314c94d65aed84405b2f25e">GLFW_DECORATED</a> window hint and attribute. This allows for the creation of things like splash screens.</p>
<h3><a class="anchor" id="news_30_keymods"></a>
Modifier key bit masks</h3>
<p ><a class="el" href="group__mods.html">Modifier key bit mask</a> parameters have been added to the <a class="el" href="group__input.html#ga0184dcb59f6d85d735503dcaae809727">mouse button</a> and <a class="el" href="group__input.html#ga5bd751b27b90f865d2ea613533f0453c">key</a> callbacks.</p>
<h3><a class="anchor" id="news_30_scancode"></a>
Platform-specific scancodes</h3>
<p >A scancode parameter has been added to the <a class="el" href="group__input.html#ga5bd751b27b90f865d2ea613533f0453c">key callback</a>. Keys that don't have a <a class="el" href="group__keys.html">key token</a> still get passed on with the key parameter set to <code>GLFW_KEY_UNKNOWN</code>. These scancodes will vary between machines and are intended to be used for key bindings.</p>
<h3><a class="anchor" id="news_30_jsname"></a>
Joystick names</h3>
<p >The name of a joystick can now be retrieved using <a class="el" href="group__input.html#gac6a8e769e18e0bcfa9097793fc2c3978">glfwGetJoystickName</a>.</p>
<h3><a class="anchor" id="news_30_doxygen"></a>
Doxygen documentation</h3>
<p >You are reading it. </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
<address class="footer">
<p>
Last update on Thu Oct 28 2021 for GLFW 3.3.5
</p>
</address>
</body>
</html>
